package com.ruoyi.system.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.system.domain.BdmUser;
import com.ruoyi.system.domain.dto.*;
import com.ruoyi.system.domain.vo.*;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 用户Mapper接口
 *
 * @author ruoyi
 * @date 2024-12-07
 */
public interface BdmUserMapper extends BaseMapper<BdmUser>
{
    /**
     * 查询用户
     *
     * @param id 用户主键
     * @return 用户
     */
    public BdmUser selectBdmUserById(Long id);

    /**
     * 查询用户列表
     *
     * @param bdmUser 用户
     * @return 用户集合
     */
    public List<BdmUser> selectBdmUserList(BdmUser bdmUser);

    /**
     * 新增用户
     *
     * @param bdmUser 用户
     * @return 结果
     */
    public int insertBdmUser(BdmUser bdmUser);


    //////////////感觉sysUserId修改
    public int  updateBdmUserBySysUserId(BdmUser bdmUser);

    /**
     * 修改用户
     *
     * @param bdmUser 用户
     * @return 结果
     */
    public int updateBdmUser(BdmUser bdmUser);

    /**
     * 删除用户
     *
     * @param id 用户主键
     * @return 结果
     */
    public int deleteBdmUserById(Long id);

    /**
     * 批量删除用户
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteBdmUserByIds(Long[] ids);

    /**
     * 根据userId查询用户信息
     * @param userId
     * @return
     */
    BdmUserVo getBdmUserByUserId(@Param("userId") Long userId);

    /**
     * 升级后购买者上级的下属归购买者的上上级
     * @param upUserId
     */
    void updateUserAwardHierarchy(@Param("upUserId") Long upUserId,@Param("flag") Integer flag);

    /**
     * 找出符合分红的用户
     * @return
     */
    List<Long> getShareOutBonusUserId();

    /**
     * 获取svip等级的用户
     * @return
     */
    List<Long> getSvipUserIdList();

    /**
     * 获取对应svip的下级的1跟2号位
     * @param userId
     * @return
     */
    List<Long> getSubordinateVip(@Param("userId") Long userId);

    /**
     * 推荐关系 下级关系上个月是否有三人等级是vip的
     * @param vipUserId
     * @return
     */
    BigDecimal getBelowNumber(@Param("vipUserId") Long vipUserId);

    /**
     * 修改用户分红权
     * @param userId
     */
    void updateUserBonusFlag(@Param("userId") Long userId);

    @Select("select count(id) from bdm_user")
    int userCount();

    /**
     * 查询分红池用户
     * @param params
     * @return
     */
    List<BdmUserVo> getSvipPage(@Param("params") Map<String, String> params);

    /**
     * 统计新老客户成交金额级新老客户成交数量
     * @return
     */
    Map<String, String>statisticsUserMakeNumber();

    /**
     * 查询会员数据
     * @param dto
     * @return
     */
    List<BdmMemberRuleVo> selectMemberDataPage(@Param("dto") BdmMemberRuleDto dto);

    /**
     * 用户团队
     * @param userGroupDto
     * @return
     */
    List<UserGroupVo> userGroup(UserGroupDto userGroupDto);

    /**
     * 我的客户
     * @return
     */
    MineGroupVo minaCustomer(Long userId);

    /**
     * 修改余额
     */
    int modifyBalance(@Param("modifyBalanceDto") ModifyBalanceDto modifyBalanceDto);

    /**
     * 修改积分
     */
    int modifyIntegral(@Param("modifyIntegralDto")ModifyIntegralDto modifyIntegralDto);


    /**
     * 团队人数
     * @param dto
     * @return
     */
    List<BdmUserTeamVo> getTeamNumber(@Param("dto") BdmUserTeamDto dto);

    /**
     * 获取本人团队的用户id
     * @return
     */
    List<Long> getSelfTeamCount(@Param("userId") Long userId);

    /**
     * 团队人数列表 团队业绩
     * @param dto
     * @return
     */
    List<BdmOrderVo> getTeamPerformance(@Param("dto") BdmUserTeamDto dto);

    void setUserDefaultLocation(@Param("userId") Long userId,@Param("parentId") Long parentId);

    /**
     * 查询用户下的助力用户信息
     * @param userId
     * @return
     */
    List<BdmTeamAdminVo> getHelpUserId(@Param("userId") Long userId);

    /**
     * 团队管理用户换位编辑
     * @param dtos
     */
    void teamUserExchange(@Param("dtos") List<BdmMemberRuleDto> dtos);

    void updateBdmUserMoney(@Param("sysUserid") Long sysUserid,@Param("amount") BigDecimal amount);

    void updateUserMone(@Param("sysUserid")Long sysUserid,@Param("amount") BigDecimal topupAmount);

     void updateWithdraw(BdmUser bdmUser);

    List<Long> selectUpUserId(@Param("userId") Long userId);

    /**
     * 找出当前1和2号位的下级用户
     * @param vipUserId
     * @return
     */
    List<Long> getLocationLowerUserId(@Param("userId") Long vipUserId);

    /**
     * 用户订单金额
     *
     * @param ids
     * @return
     */
    BigDecimal getUserMoney(@Param("ids") List<Long> ids);

    BdmUserVo selectUserParentDetail(BdmUserTeamDto dto);

    List<BdmUserVo> selectUserTeamWithDetail(BdmUserTeamDto dto);

    BdmUserVo selectUserByUserId(Long userId);

    // 获取用户最大位置
    Integer selectUserMaxLocation(Long parentId);

    int updateBonusStatus(Long sysUserId);

    int updateBonusStatusIsNull(Long sysUserId);
}
